class MyStack:

    def __init__(self):
        self.queue1 = []  # 主队列，始终保持栈的顺序
        self.queue2 = []  # 辅助队列

    def push(self, x: int) -> None:
        self.queue2.append(x)
        # 把 queue1 中的所有元素倒入 queue2
        while self.queue1:
            self.queue2.append(self.queue1.pop(0))
        # 交换 queue1 和 queue2
        self.queue1, self.queue2 = self.queue2, self.queue1

    def pop(self) -> int:
        return self.queue1.pop(0)

    def top(self) -> int:
        return self.queue1[0]

    def empty(self) -> bool:
        return not self.queue1
# 思路：
# queue1 始终保持栈的顺序，队头是栈顶；
# 每次 push：
    # 先把新元素放到 queue2；
    # 再把 queue1 中所有元素倒入 queue2；
    # 交换两个队列；
# 这样 queue1 的队头始终是栈顶，pop 和 top 操作都可以直接对应到队列的队头。

if __name__ == "__main__":
    s = MyStack()
    s.push(1)
    s.push(2)
    print(s.top())   # 输出 2
    print(s.pop())   # 输出 2
    print(s.empty()) # 输出 False